﻿namespace los3
{
    #region     知识点一   成员方法申明
    //基本概念
    //成员方法（函数）用来表现对象的行为
    //1.申明在类语句块中
    //2.是用来描述对象的行为的
    //3.规则和函数申明规则相同
    //4.受到访问修饰符规则的影响
    //5.返回值参数不受限制
    //6.方法数量不做限制
    
    //注意：
    //1.成员方法不要加static关键字
    //2.成员方法必须实例化出对象 再通过对象来使用 相当于该对象执行了某个行为
    //3.成员方法 受到访问修饰符影响

    class Person
    {
        /// <summary>
        /// 说话的行为
        /// </summary>
        /// <param name="str">说话内容</param>
        public void Speak(string str)
        {
            Console.WriteLine("{0}说{1}",name,str);
        }
        /// <summary>
        /// 是否成年
        /// </summary>
        /// <returns></returns>
        public bool IsAdult()
        {
            return age >= 18;
        }
        /// <summary>
        /// 朋友组
        /// </summary>
        /// <param name="p">新添朋友</param>
        public void AddFriend(Person p)
        {
            if(friends == null)
            {
                friends = new Person[] { p };
            }
            else
            {
                //新建一个新朋友数组
                Person[] newFriends = new Person[friends.Length + 1];
                for(int i = 0; i < newFriends.Length; i++)
                {
                    newFriends[i] = friends[i];
                    //把新加的放在最后一个
                    newFriends[newFriends.Length - 1] = p;
                    //地址重定向
                    friends = newFriends;
                }
            }
        }

        public string name;
        public int age;
        
        // 朋友数组
        public Person[] friends;
    }
    #endregion
    internal class class3
    {
        static void Main(string[] args)
        {
            Console.WriteLine("成员方法");
            #region      知识点二   成员方法的的使用
            //2.成员方法 必须实例化出对象 再通过对象来使用 相当于该对象执行了某个行为
            Person p = new Person();
            p.name = "Charlie";
            p.age = 17;
            p.Speak("阿姨洗铁路");

            if (p.IsAdult())
            {
                p.Speak("我喜欢哈兹涅米库");
            }
            else
            {
                Console.WriteLine("未成年就别想了");
            }

            Person p2 = new Person();
            p2.name = "Miku";
            p2.age = 17;
            p.AddFriend(p2);
            for (int i = 0;i < p.friends.Length;i++)
            {
                Console.WriteLine(p.friends[i].name);
            }
            #endregion

            #region     作业
            //1.建立南极星类，定义说话、走路等方法
            Person2 Sstar = new Person2();
            Sstar.name = "李海燕";
            Sstar.age = 21;
            Sstar.Speak("你好呀>v<");

            //2.为南极星系统定义人物、吃饭等方法
            SouthStar star = new SouthStar();
            star.Sname = "Charlie";
            star.Sage = 21;
            star.Eat(E_PersoStar.casual);

            SouthStar star2 = new SouthStar();
            star2.Sname = "姜艾";
            star2.Sage = 17;
            star2.Eat(E_PersoStar.lively);

            //3.思考如何和人类以及南极星联系起来
            Sstar.AddStar(star);
            Sstar.AddStar(star2);
            for (int i = 0; i <Sstar.number.Length;i++)
            {
                Console.WriteLine("南极星成员有{0}", Sstar.number[i].Sname);
            }
            #endregion
        }
    }
    #region     第一题
    /// <summary>
    /// 人
    /// </summary>
    class Person2
    {
        public string name;
        public int age;
        public SouthStar[] number;
        public void AddStar(SouthStar star)
        {
            if (number == null)
            {
                number = new SouthStar[] { star };
            }
            else
            {
                SouthStar[] number2 = new SouthStar[number.Length + 1];
                for (int i = 0; i < number.Length;i++)
                {
                    number2 [i] = number [i];
                    
                }
                number2[number2.Length - 1] = star;
                number= number2;
            }
        }
        /// <summary>
        /// 人类说话
        /// </summary>
        /// <param name="str">说话内容</param>
        public void Speak(string str)
        {
            Console.WriteLine("{0}说{1}",name,str);
        }
        /// <summary>
        /// 走路方式
        /// </summary>
        /// <param name="star">性格</param>
        public void Walk(E_PersoStar style)
        {
            Console.WriteLine("{0}很{1}地走在路上",name,style);
        }
    }
    /// <summary>
    /// 性格
    /// </summary>
    public enum E_PersoStar
    {
        /// <summary>
        /// 潇洒
        /// </summary>
        dashing,
        /// <summary>
        /// 死气沉沉
        /// </summary>
        lifeless,
        /// <summary>
        /// 优雅
        /// </summary>
        elegant,
        /// <summary>
        /// 随性
        /// </summary>
        casual,
        /// <summary>
        /// 活泼
        /// </summary>
        lively,
    }

    #endregion

    #region     第二题
    /// <summary>
    /// 南极星成员
    /// </summary>
    class SouthStar
    {
        public string Sname;
        public int Sage;
        public void Eat(E_PersoStar Sstyle)
        {
            Console.WriteLine("{0}的{1}吃饭的习惯很6",Sname,Sstyle);
        }
    }
    #endregion
}
